perm filename M11IO.FAI[P11,LCS]2 blob sn#435738 filedate 1979-04-23 generic text, type T, neo UTF8
00100		TITLE M11IO
00200		INTERNAL PUTEXT,EXTOUT,FINEXT,OSC,OUTP,INITIT,AD2,MLT,DIV,SUB
00300		EXTERNAL LM,NT,GENS,ROUT,XIN,LOCG,LFUNC,XIN,.COMM.,INS
00400	
00500		DEFINE P <17>
00600	
00700		CH3←13
00800		CH←12
00900		CH2←11
01000		BLKS←←=1
01100	
01200	REGS:	BLOCK 20
01300	DIR:	BLOCK 4
01400	
01500	;CALL PUTEXT(<FILE>,<EXT>)
01600	PUTEXT:	0	;USES EXTOUT,FINEXT, CH2
01700		MOVE 0,@0(16)
01800		MOVEM 0,FILNAM
01900		MOVE 0,@1(16)
02000		MOVEM 0,EXTNAM
02100		JSA 16,INTFIL
02200		SETZM DIR+2
02300		SETZM DIR+3
02400		ENTER CH2,DIR
02500		0
02600		JRA 16,2(16)
02700	
02800	;CALL EXTOUT(<ARRAY>,<NO. OF WORDS>)
02900	
03000	EXTOUT:	0
03100		HRRZ 0,0(16)
03200		SUBI 0,1
03300		MOVEM 0,COM
03400		MOVN 0,@1(16)
03500		HRLM 0,COM
03600		OUTPUT CH2,COM
03700		STATZ CH2,740000
03800		0
03900		JRA 16,2(16)
04000	
04100	
04200	INTFIL:	0	;INITS DSK 
04300		MOVEI REGS
04400		BLT REGS+3
04500		INIT CH2,17
04600		SIXBIT/DSK/
04700		0
04800		0
04900	INTF4:	MOVE 0,FILNAM#
05000		MOVEM 0,FN#
05100		MOVE 1,[POINT 7,FN]
05200	INTF3:	MOVE 2,[POINT 6,DIR]
05300		SETZM DIR
05400		MOVEI 3,5
05500	INTF1:	ILDB 0,1
05600		CAIN 0," "
05700		JRST INTF2
05800		SUBI 0,40
05900		IDPB 0,2
06000		SOJG 3,INTF1
06100	INTF2:	HRLZI REGS
06200		BLT 3
06300		MOVE 0,EXTNAM#
06400		MOVEM 0,EX#
06500		MOVE 1,[POINT 7,EX]
06600	EXTF3:	MOVE 2,[POINT 6,DIR+1]
06700		SETZM DIR+1
06800		MOVEI 3,5
06900	EXTF1:	ILDB 0,1
07000		CAIN 0," "
07100		JRST EXTF2
07200		SUBI 0,40
07300		IDPB 0,2
07400		SOJG 3,EXTF1
07500	EXTF2:	HRLZI REGS
07600		BLT 3
07700		JRA 16,0(16)
07800	
07900	
08000	COM:	OCT 0,0
08100	BLKNUM:	0
08200	
08300	;CALL FINEXT
08400	FINEXT:	0
08500		CLOSE CH2,0
08600		STATZ CH2,740000
08700		0
08800		RELEASE CH2,0
08900		JRA 16,0(16)
09000	OSC:	0   ;OSC UNIT GENERATOR
09100		MOVE 2,LM+3		;L4
09200		SKIPE LM+=13	;	IF(M4.EQ.0)L4=LOCG(INT(RNT(L4)))
09300		JRST OSC1
09400		KIFIX 2,NT-1(2)		;RNT(L4)  AC2=L4 POINTER IN FUNC
09500		MOVE 2,LOCG-1(2)	;L4
09600	OSC1:	MOVE 1,LM+4  ;L5
09700		MOVE 15,NT-1(1)  ;SUM
09800		MOVE 12,LM+=10		;M1
09900		MOVE 11,LM+=11		;M2
10000		MOVE 14,XIN		;AMP
10100		MOVE 10,XIN+1		;FREQ
10200	OSC2:	SETZ 4,		;J3
10300	OSC3:	KIFIX 5,15		;AC5=J4
10400		ADD 5,2   	;+L4  POINTER TO START OF THIS FUNC.
10500		MOVE 13,GENS-1(5)	;F
10600		JUMPG 11,O286
10700		FADR 15,10		;SUM
10800		JRST O290
10900	O286:	MOVE 6,4
11000		ADD 6,LM+1	;J4
11100		FADR 15,ROUT-1(6)	;SUM
11200	O290:	CAML 15,LFUNC+1		;XNFUN
11300		JRST O287
11400	;	JUMPL 15,O289
11500	O288:	MOVE 6,4
11600		ADD 6,LM+2	;J5
11700		JUMPG 12,O292
11800		MOVE 14		;AMP
11900		JRST O293
12000	O287:	FSBR 15,LFUNC+1
12100		JRST O288
12200	;;O289:	FADR 15,LFUNC+=1
12300	;;	JRST O288
12400	O292:	MOVE 7,4
12500		ADD 7,LM		;AC7=J6
12600		MOVE ROUT-1(7)
12700	O293:	FMPR 13
12800		MOVEM ROUT-1(6)
12900		AOJ 4,
13000		CAMG 4,LM+=20	;NSAMX
13100		JRST OSC3
13200		MOVEM 15,NT-1(1)
13300		JRA 16,(16)
13400	
13500	OUTP:	0
13600		MOVE 2,LM+1
13700		MOVE 4,LM
13800		MOVE 1,2
13900		ADD 1,LM+=20
14000	OU1:	MOVE 3,ROUT-1(4)
14100		FADRM 3,ROUT-1(2)
14200		AOJ 2,
14300		AOJ 4,
14400		CAMG 2,1
14500		JRST OU1
14600		JRA 16,(16)
14700	 
14800	INITIT:	0	;CALL INITIT(J3)	COMMON /LM/L(10),M(10),NSAMX
14900		MOVE 1,.COMM.+5	;I6  COMMON I(1) /P/P(1) /GENS/GENS(1) /LFUNC/LFUNC,XNFUN
15000		ADDI 1,2	;N1    C     COMMON INITIALIZATION OF GENERATORS     
15100		MOVE 2,INS-2(1)			;      N1=I6+2   
15200		SOJ  2,	  ↔	MOVE 5,[=1000]	;	N2=INS(N1-1)-1
15300		MOVE 6,1
15400	I204:	MOVE 3,6			;      DO 204 J1=N1,N2      
15500		AOJ  3,	  ↔	SUB 3,1		;      J2=J1-N1+1  
15600		SKIPL 4,INS-1(6)  ↔	JRST I201	;IF(INS(J1).GE.0)GO TO 201
15700		MOVNM 4,LM-1(3)			; 200  L(J2)=-INS(J1)
15800		MOVEI 0,1  ↔	MOVEM LM+=9(3)	;      M(J2)=1     
15900		JRST J204			;      GO TO 204     
16000	I201:	SETZM LM+=9(3)			; 201  M(J2)=0     
16100		CAMG 5,INS-1(6)  		;	IF(INS(J1)-26262.GT.0)GO TO 203
16200		JRST I203	;C***** WHAT DOES THE BIG NUMBER DO?????
16300		;C*** IT SEEMS TO BE JUST TO MAKE A FLAG. NOW CHANGED TO FIT INTO 16BITS.
16400		ADD 4,.COMM.+2 ↔	SOJ 4,	; 202  L(J2)=INS(J1)+I3-1 
16500	;;;	SKIPA                     	;      GO TO 204     
16600	;;;I203:	SUB 4,5				;203  L(J2)=INS(J1)-26262  
16700	I203:	MOVEM 4,LM-1(3)	 
16800	J204:	CAMGE  6,2 			; 204  CONTINUE    
16900		AOJA 6,I204
17000	      	MOVE 1,INS-3(1)			;      N3=INS(N1-2)  
17100		SUBI 1,=100  ↔	MOVEM 1,@(16) ↔	JRA 16,1(16)  ;      J3= N3 -100     
17200	
17300	AD2:	0
17400		MOVE 10,[FADR 3,0]
17500	OPR:	MOVE 2,LM+=20	;NSAMX
17600		ADD 2,LM+2	; +L3
17700		MOVE 0,XIN+1	;XIN2
17800		MOVE 4,LM+=10	;M1
17900		MOVE 5,LM+=11	;M2
18000		MOVE 7,LM+2	;L3
18100		MOVE 1,LM	;L1
18200		MOVE 6,LM+1	;L2
18300	ADA:	JUMPLE 4,ADB	;IF(M1.LE.0)GO TO ADB
18400		MOVE 3,ROUT-1(1)  ;ROUT(L1+J3)
18500		AOJA 1,ADB+1		;ADD 1 AND SKIP
18600	ADB:	MOVE 3,XIN			;AC3 MUST BE RESET EACH TIME.
18700		JUMPLE 5,ADC	;IF(M2.LE.0)GO TO ADC
18800		MOVE 0,ROUT-1(6)   ;ROUT(L2+J3)
18900		AOJ 6,
19000	;;	AOJA 6,ADC+1
19100	;;ADC:	MOVE 0,XIN+1
19200	ADC:	XCT 10	;GO DO ADDITION
19300		MOVEM 3,ROUT-1(7)	;PUT RESULT INTO OUTPUT BLOCK
19400		AOJ 7,		;UPDATE POINTER
19500		CAMG 7,2	;IF 7 .LE.NSAMX+ARRAY START)GO BACK FOR MORE
19600		JRST ADA
19700		JRA 16,(16)
19800	
20700	MLT:	0
20800		MOVE 10,[FMPR 3,0]
20900		JRST OPR
21000	DIV:	0
21100		MOVE 10,[FDVR 3,0]
21200		JRST OPR
21300	SUB:	0
21400		MOVE 10,[FSBR 3,0]
21500		JRST OPR
21600		END